package algo_annotations.params;

import algo_annotations.data.MyFont;
import commons.data.EchelleGeneralization;
import algo_annotations.params.param_component.ParamComponent_table_ContrainteGeomSegment;
import algo_annotations.params.param_component.ParamComponent_table_EchelleParticuliere;
import algo_annotations.params.param_component.ParamComponent_table_EchelleParticuliere.TYPE_OBJECT;
import algo_annotations.params.param_component.ParamComponent_table_ContrainteGeomAnno;
import commons.params.param_component.ParamComponent_table_Zone;
import commons.params_appli.ParamsAppli;
import commons.errors.ErrorsHandler;
import commons.io.in.Data_in;
import commons.params.A_Params;
import commons.params.A_ParamsManager;
import commons.data.Zone;
import commons.data.category.Category;
import commons.params.param_component.ParamComponent_simple;
import commons.params.param_component.ParamComponent_simple.Condition;
import commons.params.param_component.ParamComponent_simple.TypeParam;
import commons.params.param_component.ParamComponent_table_Categorie;
import commons.params.param_component.ParamComponent_table_Color;
import commons.utils.Utils;
import java.util.ArrayList;
import javax.swing.JFrame;

public class ParamsManager_a extends A_ParamsManager {

	// pointe sur dlg, mais avec le bon type
	private DlgParams_a dlg_a;


	public final static String PARAM_ANNO_COUCHE_SITE = "nom_couche_site";
	public final static String PARAM_ANNO_CHAMP_LABEL = "champ_label";
	public final static String PARAM_ANNO_SUPPR_DOUBLON_ACTIVATOR = "suppr_doublon_activator";
	public final static String PARAM_ANNO_SUPPR_DOUBLON_DISTMAX = "suppr_doublon_distance_max";

	public final static String PARAM_ANNO_TABLE_CATEGORIES_SITE = "table_categorie_site";
	public final static String PARAM_ANNO_MAINFILTER_SITE = "filtre_principal_site";
	public final static String PARAM_ANNO_DIFFERENTIATIONCOULEUR_ACTIVATOR = "differentiation_couleur_activator";
	public final static String PARAM_ANNO_TABLE_DIFFERENTIATIONCOULEUR = "table_differentiation_couleur";

	public final static String PARAM_ANNO_FONT = "font";
	public final static String PARAM_ANNO_TABLE_PARAMGEOM_ANNO = "parametre_geometrique_anno";
	public final static String PARAM_ANNO_ESPACEPROTECTION_SUPERPOSITIONSITESEG = "espace_protection_superposition_siteseg";
	public final static String PARAM_ANNO_ESPACEPROTECTION_SUPERPOSITIONANNO_1L = "espace_protection_superposition_anno_1L";
	public final static String PARAM_ANNO_ESPACEPROTECTION_SUPERPOSITIONANNO_2L = "espace_protection_superposition_anno_2L";
	public final static String PARAM_ANNO_INTERLIGNE_2L = "interligne_anno_2L";
	public final static String PARAM_ANNO_2L_ACTIVATOR = "multiligne_activator";
	public final static String PARAM_ANNO_FACTEUR_AMBIGUITE = "facteur_ambiguite";

	public final static String PARAM_SEG_COUCHE_SEG = "nom_couche_segment";
	public final static String PARAM_SEG_TOLERENCE = "tolerence_simplification_segment";
	public final static String PARAM_SEG_TABLE_CATEGORIES_SEG = "table_categorie_segment";
	public final static String PARAM_SEG_MAINFILTER_SEG = "filtre_principal_segment";
	public final static String PARAM_SEG_TABLE_CONTRAINTEGEOM_SEG = "table_epaisseur_segment";

	public final static String PARAM_ZONE_TABLE_ZONE = "table_zone";

	public final static String PARAM_ECHELLE_ECHELLEPRINCIPALE = "echelle_principale";
	public final static String PARAM_ECHELLE_TABLE_ECHELLEPARTICULIERE_SITE = "table_echelle_particuliere_site";
	public final static String PARAM_ECHELLE_TABLE_ECHELLEPARTICULIERE_SEGMENT = "table_echelle_particuliere_segment";

	public final static String PARAM_ALGO_TAILLE_VIVIER_PASS1 = "taille_vivier_pass1";
	public final static String PARAM_ALGO_NB_ITER_PASS1 = "nb_iteration_pass1";
	public final static String PARAM_ALGO_USE_PASS2_ACTIVATOR = "lancer_pass2_activator";
	public final static String PARAM_ALGO_SEUIL_NOTE_PASS2 = "seuil_note_pass2";
	public final static String PARAM_ALGO_SEUIL_INTERACTION_PASS2 = "seuil_interaction_pass2";
	public final static String PARAM_ALGO_TAILLE_VIVIER_PASS2 = "taille_vivier_pass2";
	public final static String PARAM_ALGO_NB_ITER_PASS2 = "nb_iteration_pass2";
	public final static String PARAM_ALGO_MODE_INTERACTIF_ACTIVATOR = "mode_interactif_pass2";

	public final static String PARAM_ALGO_POIDSNOTE_POSITION_DISTANNOSITE = "poids_note_distance_annosite";
	public final static String PARAM_ALGO_POIDSNOTE_POSITION_ALIGNANNO = "poids_note_alignement_anno";
	public final static String PARAM_ALGO_POIDSNOTE_POSITION_RESTER1LIGNE = "poids_note_rester_1ligne";
	public final static String PARAM_ALGO_POIDSNOTE_LISIBILITE_SUPERPOS_ANNO = "poids_note_superposition_anno";
	public final static String PARAM_ALGO_POIDSNOTE_LISIBILITE_SUPERPOS_SITE = "poids_note_superposition_site";
	public final static String PARAM_ALGO_POIDSNOTE_LISIBILITE_SUPERPOS_SEG = "poids_note_superposition_seg";
	public final static String PARAM_ALGO_POIDSNOTE_AMBIGUITE_MEME_COULEUR = "poids_note_ambiguite_meme_couleur";
	public final static String PARAM_ALGO_POIDSNOTE_AMBIGUITE_AUTRE_COULEUR = "poids_note_ambiguite_autre_couleur";
	public final static String PARAM_ALGO_POIDSNOTE_AMBIGUITE_CROISEMENT_LIENANNOSITE = "poids_note_croisement_lien_annosite";


	// En argument, le Data_in contenant les couches d'entrées
	public ParamsManager_a(JFrame frameParent, Data_in dataIn) {
		super(frameParent, dataIn);
	}

	@Override
	public String getDirectoryUserParams() {return ParamsAppli.getParam("Autogene.REPERTOIRE_PARAM_TRAITEMENT_ANNO");}

	@Override
	protected void createDlg(JFrame frameParent) {
		dlg = new DlgParams_a(frameParent, true);
		dlg_a = (DlgParams_a) dlg;
	}

	@Override
	protected void initParamComponent() {
		ParamComponent_simple a;

		registerParamComponent (new ParamComponent_simple(PARAM_ANNO_COUCHE_SITE, this, dlg_a.combo_CoucheSite, TypeParam.TYPE_STRING, false, false));
		registerParamComponent (new ParamComponent_simple(PARAM_ANNO_CHAMP_LABEL, this, dlg_a.combo_ChampLabel, TypeParam.TYPE_STRING, false));
		a = new ParamComponent_simple(PARAM_ANNO_SUPPR_DOUBLON_ACTIVATOR, this, dlg_a.cb_supprDoublons, TypeParam.TYPE_BOOL, false);
		registerParamComponent (a);
		registerParamComponent (new ParamComponent_simple(PARAM_ANNO_SUPPR_DOUBLON_DISTMAX, this, dlg_a.tf_distMaxSupprDoublons, TypeParam.TYPE_FLOAT, false, Condition.POSITIVE_STRICT, a));

		registerParamComponent (new ParamComponent_table_Categorie(PARAM_ANNO_TABLE_CATEGORIES_SITE, this, dlg_a.table_CategorySite, true));
		registerParamComponent (new ParamComponent_simple(PARAM_ANNO_MAINFILTER_SITE, this, dlg_a.combo_MainFilterSite, TypeParam.TYPE_STRING, false));
		a = new ParamComponent_simple(PARAM_ANNO_DIFFERENTIATIONCOULEUR_ACTIVATOR, this, dlg_a.cb_ActivateDifferentiationCouleur, TypeParam.TYPE_BOOL, false);
		registerParamComponent (a);
		registerParamComponent (new ParamComponent_table_Color(PARAM_ANNO_TABLE_DIFFERENTIATIONCOULEUR, this, dlg_a.table_CouleurAnno, false, a));

		a = new ParamComponent_simple(PARAM_ANNO_2L_ACTIVATOR, this, dlg_a.cb_ActivateAnno2L, TypeParam.TYPE_BOOL, false);
		registerParamComponent (a);
		registerParamComponent (new ParamComponent_simple(PARAM_ANNO_FONT, this, dlg_a.combo_Font, TypeParam.TYPE_STRING, false));
		registerParamComponent (new ParamComponent_table_ContrainteGeomAnno(PARAM_ANNO_TABLE_PARAMGEOM_ANNO, this, dlg_a.table_ParamGeomAnno, false));
		registerParamComponent (new ParamComponent_simple(PARAM_ANNO_ESPACEPROTECTION_SUPERPOSITIONSITESEG, this, dlg_a.tf_protectionAnno_superpositionSiteSeg, TypeParam.TYPE_FLOAT, false, Condition.POSITIVE));
		registerParamComponent (new ParamComponent_simple(PARAM_ANNO_ESPACEPROTECTION_SUPERPOSITIONANNO_1L, this, dlg_a.tf_protectionAnno_superpositionAnno1L, TypeParam.TYPE_FLOAT, false, Condition.POSITIVE));
		registerParamComponent (new ParamComponent_simple(PARAM_ANNO_ESPACEPROTECTION_SUPERPOSITIONANNO_2L, this, dlg_a.tf_protectionAnno_superpositionAnno2L, TypeParam.TYPE_FLOAT, false, Condition.POSITIVE, a));
		registerParamComponent (new ParamComponent_simple(PARAM_ANNO_INTERLIGNE_2L, this, dlg_a.tf_interligne_Anno2L, TypeParam.TYPE_FLOAT, false, Condition.POSITIVE, a));
		registerParamComponent (new ParamComponent_simple(PARAM_ANNO_FACTEUR_AMBIGUITE, this, dlg_a.tf_facteurAmbiguite, TypeParam.TYPE_FLOAT, false, Condition.BETWEEN_INCLUSIVE, 1, 10));

		registerParamComponent (new ParamComponent_simple(PARAM_SEG_COUCHE_SEG, this, dlg_a.combo_CoucheSegments, TypeParam.TYPE_STRING, true, false));
		registerParamComponent (new ParamComponent_simple(PARAM_SEG_TOLERENCE, this, dlg_a.tf_TolerenceSimplifSegments, TypeParam.TYPE_FLOAT, false, Condition.POSITIVE));
		registerParamComponent (new ParamComponent_table_Categorie(PARAM_SEG_TABLE_CATEGORIES_SEG, this, dlg_a.table_CategorySegment, true));
		registerParamComponent (new ParamComponent_simple(PARAM_SEG_MAINFILTER_SEG, this, dlg_a.combo_MainFilterSegment, TypeParam.TYPE_STRING, false));
		registerParamComponent (new ParamComponent_table_ContrainteGeomSegment(PARAM_SEG_TABLE_CONTRAINTEGEOM_SEG, this, dlg_a.table_ContrainteGeomSegment, true)); // peut etre null si pas de couche de segment choisie


		registerParamComponent (new ParamComponent_table_Zone(PARAM_ZONE_TABLE_ZONE, this, dlg_a.table_Zone, true));

		
		registerParamComponent (new ParamComponent_simple(PARAM_ECHELLE_ECHELLEPRINCIPALE, this, dlg_a.tf_EchellePrincipale, TypeParam.TYPE_FLOAT, false, Condition.POSITIVE));
		registerParamComponent (new ParamComponent_table_EchelleParticuliere(PARAM_ECHELLE_TABLE_ECHELLEPARTICULIERE_SITE, this, dlg_a.table_EchelleZoneParticuliereSite, true, TYPE_OBJECT.SITE));
		registerParamComponent (new ParamComponent_table_EchelleParticuliere(PARAM_ECHELLE_TABLE_ECHELLEPARTICULIERE_SEGMENT, this, dlg_a.table_EchelleZoneParticuliereSegment, true, TYPE_OBJECT.SEGMENT));


		registerParamComponent (new ParamComponent_simple(PARAM_ALGO_TAILLE_VIVIER_PASS1, this, dlg_a.tf_tailleVivier_pass1, TypeParam.TYPE_INT, false, Condition.BETWEEN_INCLUSIVE, 10, 99999));
		registerParamComponent (new ParamComponent_simple(PARAM_ALGO_NB_ITER_PASS1, this, dlg_a.tf_nbIteraction_pass1, TypeParam.TYPE_INT, false, Condition.BETWEEN_INCLUSIVE, 10, 99999));

		a = new ParamComponent_simple(PARAM_ALGO_USE_PASS2_ACTIVATOR, this, dlg_a.cb_lancer_pass2, TypeParam.TYPE_BOOL, false);
		registerParamComponent (a);
		registerParamComponent (new ParamComponent_simple(PARAM_ALGO_SEUIL_NOTE_PASS2, this, dlg_a.tf_seuilNote_pass2, TypeParam.TYPE_FLOAT, false, Condition.BETWEEN_INCLUSIVE, 0,1 ,a));
		registerParamComponent (new ParamComponent_simple(PARAM_ALGO_SEUIL_INTERACTION_PASS2, this, dlg_a.tf_seuilInteraction_pass2, TypeParam.TYPE_FLOAT, false, Condition.BETWEEN_INCLUSIVE, 0,1 ,a));
		registerParamComponent (new ParamComponent_simple(PARAM_ALGO_TAILLE_VIVIER_PASS2, this, dlg_a.tf_tailleVivier_pass2, TypeParam.TYPE_INT, false, Condition.POSITIVE_STRICT,a));
		registerParamComponent (new ParamComponent_simple(PARAM_ALGO_NB_ITER_PASS2, this, dlg_a.tf_nbIteraction_pass2, TypeParam.TYPE_INT, false, Condition.POSITIVE_STRICT,a));
		registerParamComponent (new ParamComponent_simple(PARAM_ALGO_MODE_INTERACTIF_ACTIVATOR, this, dlg_a.cb_modeInteractif_pass2, TypeParam.TYPE_BOOL, false, a));

		registerParamComponent (new ParamComponent_simple(PARAM_ALGO_POIDSNOTE_POSITION_DISTANNOSITE, this, dlg_a.tf_poidsNote_POSITION_distAnnoSite, TypeParam.TYPE_FLOAT, false, Condition.BETWEEN_INCLUSIVE, 0, 100));
		registerParamComponent (new ParamComponent_simple(PARAM_ALGO_POIDSNOTE_POSITION_ALIGNANNO, this, dlg_a.tf_poidsNote_POSITION_alignementAnno, TypeParam.TYPE_FLOAT, false, Condition.BETWEEN_INCLUSIVE, 0, 100));
		registerParamComponent (new ParamComponent_simple(PARAM_ALGO_POIDSNOTE_POSITION_RESTER1LIGNE, this, dlg_a.tf_poidsNote_POSITION_rester1Ligne, TypeParam.TYPE_FLOAT, false, Condition.BETWEEN_INCLUSIVE, 0, 100));
		registerParamComponent (new ParamComponent_simple(PARAM_ALGO_POIDSNOTE_LISIBILITE_SUPERPOS_ANNO, this, dlg_a.tf_poidsNote_LISIBILITE_superposAnno, TypeParam.TYPE_FLOAT, false, Condition.BETWEEN_INCLUSIVE, 0, 100));
		registerParamComponent (new ParamComponent_simple(PARAM_ALGO_POIDSNOTE_LISIBILITE_SUPERPOS_SITE, this, dlg_a.tf_poidsNote_LISIBILITE_superposSite, TypeParam.TYPE_FLOAT, false, Condition.BETWEEN_INCLUSIVE, 0, 100));
		registerParamComponent (new ParamComponent_simple(PARAM_ALGO_POIDSNOTE_LISIBILITE_SUPERPOS_SEG, this, dlg_a.tf_poidsNote_LISIBILITE_superposSegment, TypeParam.TYPE_FLOAT, false, Condition.BETWEEN_INCLUSIVE, 0, 100));
		registerParamComponent (new ParamComponent_simple(PARAM_ALGO_POIDSNOTE_AMBIGUITE_MEME_COULEUR, this, dlg_a.tf_poidsNote_AMBIG_memeCouleur, TypeParam.TYPE_FLOAT, false, Condition.BETWEEN_INCLUSIVE, 0, 100));
		registerParamComponent (new ParamComponent_simple(PARAM_ALGO_POIDSNOTE_AMBIGUITE_AUTRE_COULEUR, this, dlg_a.tf_poidsNote_AMBIG_autreCouleur, TypeParam.TYPE_FLOAT, false, Condition.BETWEEN_INCLUSIVE, 0, 100));
		registerParamComponent (new ParamComponent_simple(PARAM_ALGO_POIDSNOTE_AMBIGUITE_CROISEMENT_LIENANNOSITE, this, dlg_a.tf_poidsNote_AMBIG_croisementLien, TypeParam.TYPE_FLOAT, false, Condition.BETWEEN_INCLUSIVE, 0, 100));

	}

	//**********************************************************************
	// APRES RECUP DE TOUTES LES VALEURS DE LA DLG
	// AVANT LES CONTROLES et REECRITURE DANS LA DLG
	// Re-création des valeurs possibles pour les comboBox, list et autres tables
	// En effet, elles peuvent dépendre des différents autres paramètres saisis par l'utilisateur
	// Ces reinit de valeurs possibles sont à réaliser AVANT appel à
	//  checkValid() et writeToComponent() et donc avant controlAllParams()
	//**********************************************************************
	@Override
	protected void setValeursPossible() {
		ArrayList<String>[] possibleValues;

		// Lecture de quelques infos entrées par l'utilisateur
		String nomCoucheSite = (String)getParamComponent(PARAM_ANNO_COUCHE_SITE).getValue();
		ArrayList<String> vCatSite = ((ParamComponent_table_Categorie)getParamComponent(PARAM_ANNO_TABLE_CATEGORIES_SITE)).getListNomCategories_plusCategorieAllData();

		String nomCoucheSegment = (String)getParamComponent(PARAM_SEG_COUCHE_SEG).getValue();
		ArrayList<String> vCatSegment = ((ParamComponent_table_Categorie)getParamComponent(PARAM_SEG_TABLE_CATEGORIES_SEG)).getListNomCategories_plusCategorieAllData();

		ArrayList<String> vNomZone = ((ParamComponent_table_Zone)getParamComponent(PARAM_ZONE_TABLE_ZONE)).getListNomZones();

		//**********************************************************************
		//******** ONGLET Annotation *******************************************
		
		// combo couche site à généraliser
		getParamComponent(PARAM_ANNO_COUCHE_SITE).setPossibleValues(dataIn.getAllCoucheNames_typePT());
		// nom champ label
		getParamComponent(PARAM_ANNO_CHAMP_LABEL).setPossibleValues(dataIn.getChampsOfCouche(nomCoucheSite));
		// font
		getParamComponent(PARAM_ANNO_FONT).setPossibleValues(Utils.getInstalledFontFamily()/*MyFont.getListFont()*/);

		// table des catégories de sites
		// On fournit :
		//   - pour la 2eme colonne : la liste des noms de catégorie déja saisis en 1ere colonne
		//   - pour la 3ème colonne : la liste des champs possibles (issus de la couche des lignes)
		possibleValues = new ArrayList[] {null, vCatSite, dataIn.getChampsOfCouche(nomCoucheSite), null};
		getParamComponent(PARAM_ANNO_TABLE_CATEGORIES_SITE).setPossibleValues(possibleValues);
		// Filtre principal pour les sites
		// on peut choisir parmi l'une des catégories créées par l'utilisateur
		getParamComponent(PARAM_ANNO_MAINFILTER_SITE).setPossibleValues(vCatSite);
		// Table des parametre geom (=hauteur) des annotations
		// On fournit pour la 1ere colonne : la liste des catégories définie dans la table adhoc
		possibleValues = new ArrayList[] {vCatSite, null, null, null, null};
		getParamComponent(PARAM_ANNO_TABLE_PARAMGEOM_ANNO).setPossibleValues(possibleValues);
		// Table des couleurs : on fournit en 1ere colonne la liste des categories
		possibleValues = new ArrayList[] {vCatSite, null};
		getParamComponent(PARAM_ANNO_TABLE_DIFFERENTIATIONCOULEUR).setPossibleValues(possibleValues);

		
		//**********************************************************************
		//******** ONGLET Segments à éviter ************************************

		// combo couche segments à éviter
		getParamComponent(PARAM_SEG_COUCHE_SEG).setPossibleValues(dataIn.getAllCoucheNames_typeLIN());
		// table des catégories de segment à éviter
		// On fournit :
		//   - pour la 2eme colonne : la liste des noms de catégorie déja saisis en 1ere colonne
		//   - pour la 3ème colonne : la liste des champs possibles (issus de la couche des segments)
		possibleValues = new ArrayList[] {null, vCatSegment, dataIn.getChampsOfCouche(nomCoucheSegment), null};
		getParamComponent(PARAM_SEG_TABLE_CATEGORIES_SEG).setPossibleValues(possibleValues);
		// Filtre principal pour les segments
		// on peut choisir parmi l'une des catégories créées par l'utilisateur
		getParamComponent(PARAM_SEG_MAINFILTER_SEG).setPossibleValues(vCatSegment);
		// Table des contraintes geom (=epaisseur) des segment à éviter
		// On fournit pour la 1ere colonne : la liste des catégories définie dans la table adhoc
		possibleValues = new ArrayList[] {vCatSegment, null, null, Utils.getVValeurPossibleSidePlusVide()};
		getParamComponent(PARAM_SEG_TABLE_CONTRAINTEGEOM_SEG).setPossibleValues(possibleValues);


		//**********************************************************************
		//******** ONGLET Zone *************************************************

		// La table des zones n'a pas de valeurs possible dépendant des autres component
		// Les différentes valeurs possibles sont statiques et initialisée par le
		//  constructeur de ParamComponent_table_Zone


		//**********************************************************************
		//******** ONGLET Echelles *********************************************

		// Table echelle de generalisation particuliere Site
		possibleValues = new ArrayList[] {vNomZone, vCatSite, null, null};
		getParamComponent(PARAM_ECHELLE_TABLE_ECHELLEPARTICULIERE_SITE).setPossibleValues(possibleValues);
		// Table echelle de generalisation particuliere Segments
		possibleValues = new ArrayList[] {vNomZone, vCatSegment, null};
		getParamComponent(PARAM_ECHELLE_TABLE_ECHELLEPARTICULIERE_SEGMENT).setPossibleValues(possibleValues);

	}




	@Override
	protected A_Params createParams() {
		Params_a params = new Params_a();

		params.nomParam = getName();

		params.nomCoucheSite = getParamComponent_s(PARAM_ANNO_COUCHE_SITE).getValue_string();
		params.coucheSite = dataIn.getCouche(params.nomCoucheSite);
		params.nomChampLibelle = getParamComponent_s(PARAM_ANNO_CHAMP_LABEL).getValue_string();

		params.bSupprDoublon = getParamComponent_s(PARAM_ANNO_SUPPR_DOUBLON_ACTIVATOR).getValue_bool();
		params.factorDistMaxSupprDoublons = getParamComponent_s(PARAM_ANNO_SUPPR_DOUBLON_DISTMAX).getValue_double();

		params.vCategorySite = ((ParamComponent_table_Categorie)getParamComponent(PARAM_ANNO_TABLE_CATEGORIES_SITE)).getVCategory();
		params.mainFilterSite = params.getCategorySiteByName((String) getParamComponent(PARAM_ANNO_MAINFILTER_SITE).getValue());

		params.bUseDifferentiationCouleur = getParamComponent_s(PARAM_ANNO_DIFFERENTIATIONCOULEUR_ACTIVATOR).getValue_bool();
		params.vObjectColor = ((ParamComponent_table_Color)getParamComponent(PARAM_ANNO_TABLE_DIFFERENTIATIONCOULEUR)).getVColor(params, A_Params.TYPE_OBJECT.SITE_A);



		params.fontName = getParamComponent_s(PARAM_ANNO_FONT).getValue_string();
		params.myFont = new MyFont(params.fontName);
		if (!params.myFont.isOk())
			ErrorsHandler.addError("Impossible de constituer les paramètres de calcul");

		params.vContrainteGeomAnno = ((ParamComponent_table_ContrainteGeomAnno) getParamComponent(PARAM_ANNO_TABLE_PARAMGEOM_ANNO)).getVParamGeomAnno(params);
		params.bUseMultiligne =  getParamComponent_s(PARAM_ANNO_2L_ACTIVATOR).getValue_bool();
		params.facteurProtection_superpositionLigneSite = getParamComponent_s(PARAM_ANNO_ESPACEPROTECTION_SUPERPOSITIONSITESEG).getValue_double();
		params.facteurProtection_superpositionAnno_1L = getParamComponent_s(PARAM_ANNO_ESPACEPROTECTION_SUPERPOSITIONANNO_1L).getValue_double();

		if (params.bUseMultiligne) {
			params.facteurProtection_superpositionAnno_2L = getParamComponent_s(PARAM_ANNO_ESPACEPROTECTION_SUPERPOSITIONANNO_2L).getValue_double();
			params.facteurEspaceInterligne = getParamComponent_s(PARAM_ANNO_INTERLIGNE_2L).getValue_double();
		} else {
			params.facteurProtection_superpositionAnno_2L = 0;
			params.facteurEspaceInterligne = 0;
		}

		params.facteurLimiteAmbiguite = getParamComponent_s(PARAM_ANNO_FACTEUR_AMBIGUITE).getValue_double();



		params.nomCoucheSegement = getParamComponent_s(PARAM_SEG_COUCHE_SEG).getValue_string();
		params.coucheSegment = dataIn.getCouche(params.nomCoucheSegement);
		params.toleranceSegment_papier_mm = getParamComponent_s(PARAM_SEG_TOLERENCE).getValue_double();
		params.vCategorySegment = ((ParamComponent_table_Categorie)getParamComponent(PARAM_SEG_TABLE_CATEGORIES_SEG)).getVCategory();
		params.mainFilterSegment = params.getCategorySiteByName((String) getParamComponent(PARAM_SEG_MAINFILTER_SEG).getValue());
		params.vContrainteGeomSegment = ((ParamComponent_table_ContrainteGeomSegment) getParamComponent(PARAM_SEG_TABLE_CONTRAINTEGEOM_SEG)).getVContrainteGeomSegment(params);



		params.vZone = ((ParamComponent_table_Zone)getParamComponent(PARAM_ZONE_TABLE_ZONE)).getVZone();



		double echellePrincipale_inv = getParamComponent_s(PARAM_ECHELLE_ECHELLEPRINCIPALE).getValue_double();

		params.vEchelleGeneralizationSite = new ArrayList<EchelleGeneralization>();
		// Règle de généralisation principale (= par défaut, celle qui s'applique aux éléments qui n'ont pas de règle spécifique)
		// Elle se trouve en 1ere position dans le vecteur de règle
		params.vEchelleGeneralizationSite.add (new EchelleGeneralization(Zone.zonePrincipale, Category.categoryAllData, echellePrincipale_inv));
		// Règles spécifiques, basée sur des zones particulières
		params.vEchelleGeneralizationSite.addAll(((ParamComponent_table_EchelleParticuliere)getParamComponent(PARAM_ECHELLE_TABLE_ECHELLEPARTICULIERE_SITE)).getVEchelleParticuliere(params));

		params.vEchelleGeneralizationSegment = new ArrayList<EchelleGeneralization>();
		// Règle de généralisation principale (= par défaut, celle qui s'applique aux éléments qui n'ont pas de règle spécifique)
		// Elle se trouve en 1ere position dans le vecteur de règle
		params.vEchelleGeneralizationSegment.add (new EchelleGeneralization(Zone.zonePrincipale, Category.categoryAllData, echellePrincipale_inv));
		// Règles spécifiques, basée sur des zones particulières
		params.vEchelleGeneralizationSegment.addAll(((ParamComponent_table_EchelleParticuliere)getParamComponent(PARAM_ECHELLE_TABLE_ECHELLEPARTICULIERE_SEGMENT)).getVEchelleParticuliere(params));

		// l'échelle cible inv de la carte est le max des différentes échelles des objets (l'échelle principale peut etre = 0 et >0 dans certaines zones)
		params.echelleCible_inv = echellePrincipale_inv;
		for (EchelleGeneralization eg : params.vEchelleGeneralizationSite) params.echelleCible_inv = Math.max(params.echelleCible_inv, eg.echelle_inv);



		// Paramètres algo 1ere passe
		params.algo_tailleVivier_pass1 = getParamComponent_s(PARAM_ALGO_TAILLE_VIVIER_PASS1).getValue_int();
		params.algo_nbIter_pass1 = getParamComponent_s(PARAM_ALGO_NB_ITER_PASS1).getValue_int();

		// Paramètres algo 2ème passe
		params.bMake2Pass = getParamComponent_s(PARAM_ALGO_USE_PASS2_ACTIVATOR).getValue_bool();
		params.algo_seuilNote_pass2 = getParamComponent_s(PARAM_ALGO_SEUIL_NOTE_PASS2).getValue_double();
		params.algo_seuilInteraction_pass2 = getParamComponent_s(PARAM_ALGO_SEUIL_INTERACTION_PASS2).getValue_double();
		params.algo_tailleVivier_pass2 = getParamComponent_s(PARAM_ALGO_TAILLE_VIVIER_PASS2).getValue_int();
		params.algo_nbIter_pass2 = getParamComponent_s(PARAM_ALGO_NB_ITER_PASS2).getValue_int();
		params.bModeInteractif_pass2 = getParamComponent_s(PARAM_ALGO_MODE_INTERACTIF_ACTIVATOR).getValue_bool();


		// poids des différentes notes
		params.poids_noteDistSonSite                  = getParamComponent_s(PARAM_ALGO_POIDSNOTE_POSITION_DISTANNOSITE).getValue_double();
		params.poids_noteAlignementHorizontal         = getParamComponent_s(PARAM_ALGO_POIDSNOTE_POSITION_ALIGNANNO).getValue_double();
		params.poids_resterSur1Ligne                  = getParamComponent_s(PARAM_ALGO_POIDSNOTE_POSITION_RESTER1LIGNE).getValue_double();

		params.poids_noteSuperpositionAutreAnno       = getParamComponent_s(PARAM_ALGO_POIDSNOTE_LISIBILITE_SUPERPOS_ANNO).getValue_double();
		params.poids_noteSuperpositionSite            = getParamComponent_s(PARAM_ALGO_POIDSNOTE_LISIBILITE_SUPERPOS_SITE).getValue_double();
		params.poids_noteSuperpositionSegment         = getParamComponent_s(PARAM_ALGO_POIDSNOTE_LISIBILITE_SUPERPOS_SEG).getValue_double();

		params.poids_noteAmbiguiteLecture_MemeCouleur = getParamComponent_s(PARAM_ALGO_POIDSNOTE_AMBIGUITE_MEME_COULEUR).getValue_double();
		params.poids_noteAmbiguiteLecture_AutreCouleur= getParamComponent_s(PARAM_ALGO_POIDSNOTE_AMBIGUITE_AUTRE_COULEUR).getValue_double();
		params.poids_noteCroisementLienAnnoSite       = getParamComponent_s(PARAM_ALGO_POIDSNOTE_AMBIGUITE_CROISEMENT_LIENANNOSITE).getValue_double();

		params.poids_TOTAL = params.poids_noteDistSonSite + params.poids_noteAlignementHorizontal + params.poids_resterSur1Ligne +
							 params.poids_noteAmbiguiteLecture_MemeCouleur + params.poids_noteAmbiguiteLecture_AutreCouleur +
							 params.poids_noteSuperpositionAutreAnno + params.poids_noteSuperpositionSite +
							 params.poids_noteSuperpositionSegment + params.poids_noteCroisementLienAnnoSite;


		return params;
	}


}
